/**
 * 审计上下文接口
 * 
 * libs/db 只依赖此接口，不依赖具体实现
 * 具体实现由上层框架提供（如 nest-mods）
 */
export interface IAuditContext {
  /**
   * 获取当前操作用户 ID
   */
  getUserId(): string | undefined;
}

/**
 * 审计上下文管理器
 * 
 * 使用单例模式，由上层框架设置具体实现
 * 
 * @example
 * // 框架层设置实现
 * AuditContextManager.setContext(new AuditContextAdapter());
 * 
 * // libs/db 内部使用
 * const userId = AuditContextManager.getUserId();
 */
export class AuditContextManager {
  private static context: IAuditContext | null = null;

  /**
   * 设置上下文实现（由框架层调用，通常在模块初始化时）
   */
  static setContext(context: IAuditContext): void {
    this.context = context;
  }

  /**
   * 获取当前用户 ID
   */
  static getUserId(): string | undefined {
    if (!this.context) {
      return undefined;
    }
    return this.context.getUserId();
  }

  /**
   * 清除上下文（测试时使用）
   */
  static clearContext(): void {
    this.context = null;
  }

  /**
   * 检查上下文是否已设置
   */
  static hasContext(): boolean {
    return this.context !== null;
  }
}


